import matplotlib.pyplot as plt
import cv2 as cv
import os
import random
import pickle


if os.path.exists('clf'):
    with open("clf", 'rb') as f:
        clf = pickle.load(f)
if os.path.exists('acc'):
    with open("acc", 'rb') as f:
        acc = pickle.load(f)


for i in range(1,6):
    filename=str(i)+'.jpg'
    print(filename)
    img = cv.imread(filename)  # 读取
    img_gray= cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ######用最近邻算法缩放到指定大小####
    img_gray = cv.equalizeHist(img_gray) #对图像进行直方图增强


    # 1. 创建级联分类器
    face_cascade = cv.CascadeClassifier()                   
    # 2. 引入训练好的可用于人脸识别的级联分类器模型
    face_cascade.load("haarcascade_frontalface_alt.xml")
    # 3. 用此级联分类器识别图像中的所有人脸信息，返回一个包含有所有识别的人联系系的列表
    # 列表中每一个元素包含四个值：面部左上角的坐标(x,y) 以及面部的宽和高(w,h)
    faces = face_cascade.detectMultiScale(img_gray)

    # 4. 为图像中的所有面部画框
    for (x, y, w, h) in faces:
        new_img = cv.resize(img_gray[y:y+h, x:x+w], (32, 32), interpolation=cv.INTER_NEAREST)
        new_img_1 = new_img.reshape(-1) 
        cv.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
        
        cv.putText(img, # 要显示字体的图片
                str(clf.predict([new_img_1])), # 要显示的内容
                (x,y-10), # 要显示的位置
                cv.FONT_HERSHEY_SIMPLEX, # 要使用的字体 -> 一般英文字体
                1, # 字体放大倍数
                (0,255,0), # 字体颜色
                2) # 字体线条粗细
        cv.putText(img,'acc={:.2f}'.format(acc),(20,30),cv.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2) #
    plt.figure(figsize=(10, 5))
    plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
    plt.show()


